#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include "sessionfriendarea.h"
#include <QWidget>
#include <QPushButton>
#include <QIcon>
#include <QLineEdit>

#include "messageeditarea.h"
#include "messageshowarea.h"
#include "model/data.h"

class MainWidget : public QWidget
{
    Q_OBJECT

private:
    MainWidget(QWidget *parent = nullptr);

public:
    static MainWidget* getInstance();
    ~MainWidget();
private:
    static MainWidget* instance;


private:
    //窗口最左侧
    QWidget* windowLeft;
    //窗口中间部分
    QWidget* windowMid;
    //窗口右侧
    QWidget* windowRight;
    //用户头像
    QPushButton* UserAvatar;
    //会话标签页按钮
    QPushButton* sessionTabBtn;
    //好友标签页按钮
    QPushButton* friendtabBtn;
    //好友申请
    QPushButton* applyTabBtn;
    //用户搜索框s
    QLineEdit* searchEdit;
    //添加好友按钮
    QPushButton* addFriendBtn;
    //会话好友区
    SessionFriendArea* sessionFriendArea;
    //显示会话标题
    QLabel* sessionTitleLabel;
    //显示会话详情按钮
    QPushButton* extraBtn;
    //消息展示区
    MessageShowArea* messageShowArea;
    //消息编辑区
    MessageEditArea* messageEditArea;


    enum ActiveTab{
        SESSION_LIST,
        FRIEND_LIST,
        APPLY_LIST
    };

    ActiveTab activeTab = SESSION_LIST;

public:
    //切换到会话标签页
    void switchTabSession();
    //切换到好友列表标签页
    void switchTabFriend();
    //切换到好友申请标签页
    void switchTabApply();

    // 初始化信号槽
    void initSignalSlot();
    void initWebsocket();

    //加载会话列表数据
    void loadSessionList();
    //加载好友列表数据
    void loadFriendList();
    //加载好友申请数据
    void loadApplyList();

    // 初始化主窗口
    void initMainWindow();
    // 初始化左侧窗口布局
    void initLeftWindow();
    // 初始化中间窗口布局
    void initMidWindow();
    // 初始化右侧窗口布局
    void initRightWindow();

    // 更新好友列表
    void updateFriendList();

    // 更新会话列表
    void updateChatSessionList();

    // 更新好友申请表
    void updateApplyList();

    // 更新最近几条消息
    void updateRecentMessage(const QString& chatSessionId);

    //切换会话
    void switchSession(const QString& userId);

    // 加载消息
    void loadRecentMessage(const QString& chatSessionId);

    MessageShowArea* getMessageShowArea();

};
#endif // MAINWIDGET_H
